Conventionally, a semiconductor memory has been widely known which includes a memory cell holding charges corresponding to data. The data to be stored in the memory cell is determined based on a comparison of a voltage corresponding to the amount of charges held in the memory cell with a predetermined read voltage. The amount of charges held in the memory cell is changed with time and at each access time. In order to prevent that the data is changed according to the change in the amount of charges, there is developed a technology in which the read voltage is shifted according to the change in the amount of charges.